<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      //请实现以下效果
      function add(a, b, c) {
        return a + b + c
      }
      // console.log(add.length);

      // const res = add(1, 2, 3) // 6


      // 声明一个函数，将函数作为参数传进去
      // 在函数内部声明一个函数，将参数传进去
      // 判断当前数组长度是否大于等于传入函数的长度
      // 为true直接执行函数 将结果return出入
      // 为false重新调用内部函数，将内部函数return出去，
      // 将当前参数传进去，下一个参数进来时进行数组拼接
      // 最后return出去一个函数
      const curry = fn => {
        let curry1 = (...args1) => args1.length >= fn.length ? fn(...args1) : (...args2)=> curry1(...args1, ...args2)
        return curry1
      }

      // const curry = (fn) => {
      //       let judge = (...args) => {
      //           if (args.length === fn.length) return fn(...args)
      //           return (...arg) => judge(...args, ...arg)
      //       }
      //       return judge
      //   }
      let addCurry = curry(add)

      // console.log(addCurry);
      const res2 = addCurry(1)(2)(3) // 6

      console.log(res2)
    </script>
  </body>
</html>
